<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
          width: 500px;
          height: 500px;
          background-color: #ccc;
          color: #fff;
          text-align: center;
          font-size: 100px;
        }
      </style>
</head>
<body>
    
    <div class="box"></div>
    <script src="./lodash.min.js"></script>
    <script>
        const box = document.querySelector('.box')

        let i = 1 
        const move = () => {
            box.innerHTML = i++
        }
        // 节流 _.throttle(fn, ms)
        // 防抖 _.debounce(fn, ms)

        // box.addEventListener('mousemove', _.throttle(move, 10))
        box.addEventListener('mousemove', _.debounce(move, 300))

        // 防抖和节流的面试点

        // 1. 能说出什么是防抖，什么是节流
        // 防抖： 你先抖动着，什么时候停了，我再执行。
        // ===> 防抖是将多次密集触发，合并为一次。

        // 节流：减少一定时间内，事件触发的频率。 （减少水流）


        // 2. 能说出它们的应用场景

        // 应用场景：
        // 防抖：1. 搜索框输入查询
        //      2. 多次点击按钮提交

        // 节流：
        //     1. 窗口的resize事件
        //     2. scroll事件，mousemove事件等。

        // 3. ==> 高级一点，手写防抖节流
 
        // 防抖
        const debounce = (fn, ms = 0) => {
            let timerId 
            return function(...args){
                clearTimeout(timerId)
                timerId = setTimeout(() => {
                    fn.call(this, ...args)
                }, ms)
            }
        }

        // 节流
        // 时间戳版本 / 定时器版本
    </script>
</body>
</html>